//
//  CAKeyframeAnimation.swift
//  Documentation
//
//  Created by Toj on 12/29/22.
//

import QuartzCore

open class CAKeyframeAnimation : CAPropertyAnimation {
    
    /// 表示关键帧动画要应用的值的数组.
    /// 你可以在数组中指定多个目标值, 动画将按照数组中的顺序逐帧展示.
    open var values: [Any]?
    
    /// 表示关键帧动画的路径.
    /// 使用该属性, 你可以指定一个CGPath对象, 让关键帧动画沿着路径进行展示.
    /// 路径可以是直线、曲线等各种形状
    open var path: CGPath?
    
    /// 表示关键帧动画的时间进度控制.
    /// 它是一个与values数组对应的数组, 每个元素表示对应关键帧的时间点
    /// 通过设置适当的时间点, 可以控制每个关键帧在动画过程中的呈现时机
    open var keyTimes: [NSNumber]? = [0, 1]
    
    /// 表示关键帧之间的时间插值函数.
    /// 它是一个与values数组对应的数组,
    /// 每个元素表示对应关键帧之间的时间插值函数, 用于控制动画过程中的速度变化.
    /// 默认情况下, 动画是线性插值的, 即匀速进行.
    /// 你可以使用不同的贝塞尔曲线函数来自定义插值效果
    open var timingFunctions: [CAMediaTimingFunction]?
    
    /// 表示关键帧动画的计算模式. 默认: 线性
    open var calculationMode: CAAnimationCalculationMode = .linear
    
    /// keyValue之间曲线平滑可以通过下面3个属性调整
    /**
     * 控制曲线的"紧密度"
     * 正值: 更紧
     * 负值: 更圆
     */
    open var tensionValues: [NSNumber]?
    /**
     * 控制关键帧之间的"连续性"
     * 正值: 锐角
     * 负值: 倒角
     */
    open var continuityValues: [NSNumber]?
    /**
     * 曲线发生的位置
     * 正值: 控制点之前移动曲线
     * 负值: 控制点之后移动它
     */
    open var biasValues: [NSNumber]?
    
    
    /// 定义沿路径动画的对象是否旋转以匹配路径切线
    open var rotationMode: CAAnimationRotationMode? = nil
}
